﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AgileSaude.Entities;
using AgileSaude.Data;
using AgileSaude.Data.Repository;
using FBS.Framework;
using AgileSaude.Business.Validation;

namespace AgileSaude.Business.Process
{
    internal class ClinicaProcess
    {
        internal Resultado Incluir(ClinicaEntities pObj)
        {
            Resultado resultado = new Resultado();

            try
            {
                ClinicaValidation userValid = new ClinicaValidation(pObj);
                resultado = userValid.ValidarClinica();

                if (resultado.Sucesso)
                {
                    clinica obj = new clinica();
                    Util.CopyPropertyValues(pObj, obj);

                    new clinicaRepository().Add(obj);
                }
            }
            catch (Exception ex)
            {
                String mensagem = ex.Message;
                new ResultadoProcess().GravarLog(ref resultado, mensagem, "AgileSaude", "", "Incluir", "ClinicaProcess");
                resultado.Sucesso = false;
                throw ex;
            }

            return resultado;
        }

        internal Resultado Alterar(ClinicaEntities pObj)
        {
            Resultado resultado = new Resultado();
            clinicaRepository clinicaRepository = new clinicaRepository();

            try
            {
                clinica user = clinicaRepository.getclinica(pObj.idClinica);
                Util.CopyPropertyValues(pObj, user);

                clinicaRepository.Update();
                resultado.Sucesso = true;
            }
            catch (Exception ex)
            {
                Util.GravarLog(ex.Message, "AgileSaude");
                resultado.Sucesso = false;
                throw ex;
            }

            return resultado;
        }

        internal ClinicaEntities GetClinica(int pIdClinica)
        {
            clinica oData = new clinicaRepository().getclinica(pIdClinica);

            if (oData == null)
            {
                return new ClinicaEntities();
            }
            else
            {
                return GetClinica(oData);
            }

        }

        internal ClinicaEntities GetClinica(string pNome)
        {
            clinica oData = new clinicaRepository().getclinica(pNome);

            if (oData != null)
            {
                return GetClinica(oData);
            }
            else
            {
                return null;
            }

        }

        private static ClinicaEntities GetClinica(clinica oData)
        {
            ClinicaEntities oEntitie = new ClinicaEntities();

            Util.CopyPropertyValues(oData, oEntitie);

            return oEntitie;
        }

        internal List<ClinicaEntities> Listar(ClinicaEntities pFiltro, ref Resultado resultado)
        {
            List<ClinicaEntities> lista = new List<ClinicaEntities>();

            if (pFiltro == null)
            {
                pFiltro = new ClinicaEntities();
            }

            try
            {
                var Clinica = from u in new clinicaRepository().GetAll()
                             where (string.IsNullOrEmpty(pFiltro.Nome) || u.Nome.ToUpper().Contains(pFiltro.Nome.ToUpper())) &&
                              (pFiltro.idClinica == 0 || u.idClinica == pFiltro.idClinica)
                             select u;

                foreach (clinica user in Clinica)
                {
                    lista.Add(GetClinica(user));
                }

                resultado.Sucesso = true;
            }
            catch (Exception ex)
            {
                String mensagem = ex.Message;
                new ResultadoProcess().GravarLog(ref resultado, mensagem, "AgileSaude", "", "Listar", "ClinicaProcess");
                resultado.Sucesso = false;
            }

            return lista;
        }

        //internal Resultado AtivarInativar(int pIdClinica, bool pStatus)
        //{
        //    Resultado resultado = new Resultado();
        //    String mensagem = String.Empty;

        //    try
        //    {
        //        clinicaRepository rep = new clinicaRepository();

        //        var Clinica = rep.getclinica(pIdClinica);

        //        Clinica.Ativo = pStatus;
        //        rep.Update();

        //        mensagem = "Médico " + (pStatus ? "ativado" : "inativado") + " com sucesso.";

        //        Mensagem omensagem = new Mensagem();
        //        omensagem.Descricoes.Add(mensagem);

        //        resultado.Sucesso = false;
        //        resultado.Mensagens.Add(omensagem);

        //        resultado.Sucesso = true;
        //    }
        //    catch (Exception ex)
        //    {
        //        mensagem = ex.Message;
        //        new ResultadoProcess().GravarLog(ref resultado, mensagem, "AgileSaude", "Status", "AtivarInativar", "ClinicaProcess");
        //        resultado.Sucesso = false;

        //    }

        //    return resultado;

        //}
    }
}
